package info.motteke.kurumi;

import java.util.List;

/**
 * アニメーションを行う画像を表します。
 *
 * @author Y.Wakamatsu
 *
 * @param <I> 画像のクラス
 */
public interface AnimationImage<I extends Object> {

    /**
     * 現在の画像を取得します。
     */
    public I getCurrentImage();

    /**
     * 次のアニメーションに遷移します。
     */
    public void next();

    /**
     * このアニメーションが一周するまでにかかる時間をミリ秒単位で返します。
     */
    public int getPeriod();

    /**
     * この画像が持つフレームのリストを返します。
     */
    public List<Frame<I>> getAllFrames();

    /**
     * このアニメーションを破棄します。
     */
    public void dispose();

    /**
     * アニメーションのあるコマを表します。
     *
     * @author Y.Wakamatsu
     *
     * @param <I>
     */
    public static interface Frame<I extends Object> {

        /**
         * 現在の画像を取得します。
         */
        public I getImage();

        /**
         * 次の画像に遷移するための待ち時間をミリ秒単位で取得します。
         */
        public int getWait();

        /**
         * このフレームを破棄します。
         */
        public void dispose();
    }
}
